<!doctype html>
<html lang="en">

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  
  <meta name="generator" content="Hugo 0.98.0" />

  
  <meta name="description" content="走在通往幸福的路上">
  

  
  <link rel="apple-touch-icon" sizes="180x180" href="https://blog.v5u.win/apple-touch-icon.png">

  
  <link rel="icon" type="image/png" sizes="32x32" href="https://blog.v5u.win/favicon-32x32.png">

  
  <link rel="icon" type="image/png" sizes="16x16" href="https://blog.v5u.win/favicon-16x16.png">

  
  <link rel="manifest" href="https://blog.v5u.win/site.webmanifest">

  
  <link rel="mask-icon" href="https://blog.v5u.win/safari-pinned-tab.svg" color="">

  <meta name="msapplication-TileColor" content="">

  <meta name="theme-color" content="">

  
  <link rel="stylesheet" href="https://blog.v5u.win/css/bootstrap.min.css" />

  
  <title>Xcode Code Snippets | 为吾优</title>
  

  <style>
body {
  min-width: 300px;
}

.custom-navbar {
  margin-bottom: 1em;
  height: 60px;
}

.custom-navbar a {
  display: inline-block; 
  padding: 18px 0;
  margin-right: 1em; 
  font-weight: bold; 
}

.custom-navbar a:hover,
.custom-navbar a:focus {
  text-decoration: none; 
}

@media print {
  .custom-navbar {
    display: none;
  }
}

article {
  padding-bottom: 1em;
}

img {
  max-width: 100%;
}


body {
  background-color: #fff;
}



body {
  color: #212529;
}



a {
  color: #007bff;
}



a:hover,
a:focus {
  color: #0056b3;
}



.custom-navbar {
  background-color: #212529;
}



.custom-navbar a {
  color: rgba(255,255,255,.75);
}



.custom-navbar a:hover,
.custom-navbar a:focus {
  color: rgba(255,255,255,1);
}



.container {
  max-width: 800px;
}





</style>
</head>

<body>
  <nav class="custom-navbar">
  <div class="container">
    
    <a href="/">文章</a>
    
    <a href="/tags/">标签</a>
    
    <a href="/about/">关于</a>
    
    <a href="/index.xml">RSS</a>
    
  </div>
</nav>
  
  <div class="container">
    <article>
      <h1>Xcode Code Snippets</h1>
<p>
  <small class="text-secondary">
  
  
  2018-09-18
  </small>
  

<small><code><a href="https://blog.v5u.win/tags/xcode">xcode</a></code></small>

</p>
<p>Xcode Code Snippets</p>
<p>在Double Encore，我们写的代码都是干净，可重用的——不过，有时候并不能完全做到。如在使用pragma mark的时候。下面就是一个示例：</p>
<p>#pragma mark – UIViewController overrides</p>
<p>通过pragma mark，可以让代码看起来既整洁又有组织。虽然这很重要，但是会带来额外的输入操作和时间。此时，我们可以使用code snippets。</p>
<p>通过code snippets，我们可以创建一些可重用的代码块，并且在任何需要的地方很容易的就可以使用这些代码块。这可以节省输入需要的操作和时间。并且，一旦你学会使用code snippets，会发现你可以创建并扩充自己的code snippet library。</p>
<p>创建一个code snippet非常简单。首先，打开Xcode并在utilities panel中选择code snippet library。</p>
<p>上图中，可以看到在code snippet library中已经有一些数据了。</p>
<p>接着，输入希望创建的code snippet。在这里，我为pragma mark创建一个code snippet。如下图所示，在代码编辑器中输入 “#pragma mark – UIViewController overrides”。</p>
<p>选中代码块，如下图所示：</p>
<p>然后单击并按住代码块，知道文本光标变为箭头光标。接着将代码块拖放到code snippet library中，然后松开鼠标。如下图所示</p>
<p>此时会弹出一个popover，通过该popover可以对新的code snippet进行编辑，如下图所示。</p>
<p>首先，是定snippet的名字。这里我指定为“Pragma Mark”</p>
<p>然后，指定该snippet的completion shortcut（可选项）。这里我指定为“pm”。这样设置以后，在Xcode的代码编辑器中只需要输入快捷方式（pm），就能简单的将这个snippet添加到代码中。非常有用！</p>
<p>接着，可以看到在上面的示例中，pragma mark的标题是“UIViewController overrides”，不过我们是希望对其修改一下，以能够很容易的输入任意标题。</p>
<p>我们可以简单的将code snippet包含的文本内容修改为“#pragma mark – “即可。不过，这里还有更好的一个办法——将文本块封装到“&lt;#” 和 “#&gt;”中间，这样code snippet将指出我们可以插入自定义文本的完整范围。</p>
<p>下面，将“UIViewController overrides”替换为“&lt;#Title#&gt;”。</p>
<p>注意，completion scopes字段在这里并没有做修改，通过该字段可以指定completion shortcut的有效范围。</p>
<p>最后，点击edit按钮，以完成snippet的编辑。之后可以在这个popover画面中看到最终结果的一个预览效果。</p>
<p>然后点击popover中的done按钮。下面，你可以将我们在代码编辑器中为创建snippet而写入的文本行删除掉。</p>
<p>现在来试用一下刚刚创建的snippet！有两种方法。第一种是在code snippet library中找到snippet，然后用鼠标将其拖拽到代码编辑器中…</p>
<p>…然后松开鼠标。</p>
<p>一旦将snippet拖放到代码编辑器之后，就可以通过点击键盘上的tab键在不同的completion字段间移动焦点。</p>
<p>第二种方法是在代码编辑器里简单的输入completion shortcut中设置的内容即可。我们这里是“pm”。</p>
<p>然后点击键盘中的return键，就可以将snippet插入到代码编辑器中。</p>
<p>很简单吧！现在你已经知道如何创建自己的snippet了，你将发现这非常的有用。任何时候，你都遇到重复输入的相同代码块，都可以考虑将其添加到你的code snippets library中。</p>
<p>下面是我经常使用到的一些snippet：</p>
<p>Title: Animation Block</p>
<p>Completion Shortcut: ab</p>
<p>Completion Scopes: Function or Method</p>
<p>void (^&lt;#Title#&gt;)(void) = ^{ };</p>
<p>Title: Animation Completion Block</p>
<p>Completion Shortcut: acb</p>
<p>Completion Scopes: Function or Method</p>
<p>void (^&lt;#Title#&gt;)(BOOL) = ^(BOOL finished) { };</p>
<p>Title: Notification Add</p>
<p>Completion Shortcut: na</p>
<p>Completion Scopes: Function or Method</p>
<p>[[NSNotificationCenter defaultCenter] addObserver:&lt;#Observer#&gt; selector:&lt;#Selector#&gt; name:&lt;#Name#&gt; object:&lt;#Object#&gt;];</p>
<p>Title: Notification Remove</p>
<p>Completion Shortcut: nr</p>
<p>Completion Scopes: Function or Method</p>
<p>[[NSNotificationCenter defaultCenter] removeObserver:&lt;#Observer#&gt; name:&lt;#Name#&gt; object:&lt;#Object#&gt;];</p>
<p>Title: NSLog</p>
<p>Completion Shortcut: log</p>
<p>Completion Scopes: Function or Method</p>
<p>NSLog(@”&lt;#Log#&gt;”);</p>
<p>Title: Private Interface</p>
<p>Completion Shortcut: pi</p>
<p>Completion Scopes: Top Level</p>
<p>@interface &lt;#Title#&gt; ()</p>
<p>@end</p>
<p>Title: Property Assign</p>
<p>Completion Shortcut: pa</p>
<p>Completion Scopes: All</p>
<p>@property (assign, nonatomic)</p>
<p>Title: Property Strong</p>
<p>Completion Shortcut: ps</p>
<p>Completion Scopes: All</p>
<p>@property (strong, nonatomic)</p>
<p>Title: Property Unsafe Unretained</p>
<p>Completion Shortcut: pu</p>
<p>Completion Scopes: All</p>
<p>@property (unsafe_unretained, nonatomic)</p>
<p>来源http://www.cocoachina.com/industry/20130604/6336.html</p>

    </article>
  </div>

  
  
  

  
</body>

</html>